import distributedData from '@ohos.data.distributedData';
const STORE_ID = 'ADS_kvstore';
export default class KvStoreModel {
    kvManager;
    kvStore;
    constructor() {
    }
    createKvStore(callback) {
        if (typeof (this.kvStore) === 'undefined') {
            //创建KVManager实例的配置信息
            var config = {
                bundleName: 'com.example.ads',
                userInfo: {
                    userId: '0',
                    userType: 0
                }
            };
            let self = this;
            //创建一个KVManager对象实例
            distributedData.createKVManager(config).then((manager) => {
                self.kvManager = manager;
                //创建 KvStore实例的配置信息
                var options = {
                    createIfMissing: true,
                    encrypt: false,
                    backup: false,
                    autoSync: true,
                    kvStoreType: 1,
                    securityLevel: 3,
                };
                //指定Options和storeId，创建并获取KVStore数据库
                self.kvManager.getKVStore(STORE_ID, options).then((store) => {
                    self.kvStore = store;
                    callback();
                });
            });
        } else {
            callback();
        }
    }
    //添加键值对到数据库：使用put()方法，该方法接收两个参数，分别是要添加的数值Key和要添加的数值
    put(key, value) {
        this.kvStore.put(key, value).then((data) => {
            console.log("put success: " + JSON.stringify(data));
//            this.kvStore.get(key).then((data) => {
//                console.log("get success: " + JSON.stringify(data));
//            });
        }).catch((err) => {
            console.log("put err: " + JSON.stringify(err));
        });
    }
    //数据库中删除指定键值对的数据：使用delete()方法，该方法接收一个参数，需要删除数据的键值key，结果以Promise形式返回
    delete(key) {
        this.kvStore.delete(key).then((data) => {
            console.log("delete success: " + JSON.stringify(data));
        }).catch((err) => {
            console.log("delete err: " + JSON.stringify(err));
        });
    }
    //数据库中获取指定键值对的数据：使用get()方法，该方法接收两个参数，分别是需要获取数据的键值key和返回函数callback,结果以callback函数形式返回。
    get(key,callback){
        this.kvStore.get(key).then((data) => {
            callback(data);
        });
    }
    broadcastMessage(key, value) {
        let self = this;
        this.createKvStore(() => {
            self.put(key, value);//self.delete(key)新增或者删除数据都可导致数据变化
        });
    }
    setOnMessageReceivedListener(callback) {
        let self = this;
        this.createKvStore(() => {
            self.kvStore.on('dataChange', 1, (data) => {
                console.info('dataChange:' + JSON.stringify(data));
                for (var i = 0; i < data.updateEntries.length; i++) {
                    var str = data.updateEntries[0].value.value;
                    callback(data.updateEntries[0].key,str, 1);
                    return;
                }
            });
        });
    }
}